Pointers in Playstation Games Version A Duo SYNOPSIS This article intends to be a guide for game translators, particularly in finding text pointers. Text pointers are small segments of data used to address the start of important game data, such as text and pictures. All examples will be from the playstation game SD Gundam GCentury, however they may be applied to any other game. An understanding of the hexadecimal number system is assumed. TOOLS USED IN THIS GUIDE CDMage 1.02.1 Beta 5, a CD image editor http://www.geocities.com/cdmage/ CDRwin, a CD image extractor http://www.goldenhawk.com/ pSX 1.13, a playstation emulator http://psxemulator.gazaxian.com/ MadEdit, a free hexidecimal editor http://madedit.sourceforge.net/ It is recommended that once these tools are installed, shortcuts to all of them be placed in a single TOOLS folder for ease of navigation. EXTRACTING A DISC IMAGE Using CDRwin, Extract Disc/Tracks/Sectors to Image File. Select a desired directory under Image Filename, for example: C:\GCentury\gcentury. C:\GCentury will be the directory and gcentury will become the image's file name. For extraction settings: Reading Options RAW, Error Recovery Abort, Jitter Correction Disable, Subcode Analysis Disable, Data Speed 1x, Audio Speed 1x, Read Retry Count 50, Subcode Threshold 300. Then press start. USING CDMage TO EXTRACT AND INSERT FILES To extract files using CDMage, open up the image's cue file. Then, pick the main data directory on the left tree display, for example: Track 1[MODE2/2352][]. Highlight all folders and directories on the right folder display. Press Extract Tracks icon. Pick a directory and press Extract. To insert a modified file, open the image's cue file. On the right folder display, right click on the file desired. Press Import File. FINDING TEXT POINTERS For Japanese games it is important that Windows has the ability to display Japanese characters. ?????? should read in Japanese. If it looks like garbage, Japanese must be enabled under Regional and Language Settings in the Control Panel. Pointers may be found in a file with the main text data. For Gundam GCentury, this is in the main PS-EXE file, SLPS_007.85. Open the file using MadEdit. Make sure the encoding, under the View menu, is set to SHIFT-JIS or another japanese encoding. Then browse the file for Japanese. SD Gundam GCentury has mobile suit names on line 000B23CO. Click on the first character and then look up to see the exact address. ?????? is on line 000B23CO, and is under column 4. Add these numbers together to achieve 000B23C4. Next, we will find the text as it appears in the running game. Open the disc image using pSX. Navigate ingame to a place where text appears. Go Debug -> Monitor. View the memory. Go to File -> Save binary. Start address is 0 and size, in bytes, depends on the game. A value of 1000000 bytes is sufficent for Gundam GCentury. Open this created file in MadEdit. Search for the same text as in the PS-EXE. ?????? now appears at 000C1BC4. The difference in memory must be found to calculate pointers in the future: C1BC4-B23C4=F800. Pointers may now be found and created using this information. To find the pointer for the ?????? text, start with the start address B23C4. Next, add the difference in memory: B23C4+F800=C1BC4. The last two bytes, 1BC4 form the pointer address. However, they are represented backwards, so they must be reversed to form C41B. C41B is the pointer. Find the pointer for the next text name as well. In GCentury, the next name is ???. The pointer for this is BC1B. Open the PS-EXE in MadEdit and search for your values, C41B and BC1B. They should appear very close to each other. The game file may be edited and new pointer can be calculated using the same method described above. POINTER CALCULATION PROCEDURE 1. Find address in game file: 000B23C4 2. Find address in memory: 000B23C4 3. Find difference: C1BC4-B23C4=F800 4. Add difference to game file: B23C4+F800=C1BC4 5. Remove leading digit: 1BC4 6. Reverse last two bytes: C41B 7. C41B is the pointer address.